package com.jinglu.cloud.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jinglu.cloud.common.constants.HttpResultConstant;
import com.jinglu.cloud.common.model.vo.PageVO;
import com.google.common.collect.Lists;
import org.springframework.util.StringUtils;

import java.util.List;

public class ResponseUtil {

    /**
     * 判断是否返回成功
     *
     * @param result
     * @return
     */
    public static boolean isSuccess(String result) {
        if (!StringUtils.isEmpty(result)) {
            JSONObject jsonResult = JSON.parseObject(result);
            String code = jsonResult.getString(HttpResultConstant.CODE);
            return !StringUtils.isEmpty(code) && code.equals(HttpResultConstant.SUCCESS_CODE);
        }
        return false;
    }

    /**
     * 获取返回结果
     *
     * @param result
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getDataObject(String result, Class<T> clazz) {
        if (!StringUtils.isEmpty(result)) {
            JSONObject jsonResult = JSON.parseObject(result);
            String data = jsonResult.getString(HttpResultConstant.DATA);
            return JSON.parseObject(data, clazz);
        }
        return null;
    }

    /**
     * 获取返回结果 (String)
     *
     * @param result
     * @return
     */
    public static String getDataString(String result) {
        if (!StringUtils.isEmpty(result)) {
            JSONObject jsonResult = JSON.parseObject(result);
            String data = jsonResult.getString(HttpResultConstant.DATA);
            return data;
        }
        return null;
    }

    /**
     * 获取返回结果 (Integer)
     *
     * @param result
     * @return
     */
    public static Integer getDataInt(String result) {
        if (!StringUtils.isEmpty(result)) {
            JSONObject jsonResult = JSON.parseObject(result);
            return jsonResult.getInteger(HttpResultConstant.DATA);
        }
        return null;
    }

    /**
     * 获取返回结果
     *
     * @param result
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> List<T> getDataArray(String result, Class<T> clazz) {
        if (!StringUtils.isEmpty(result)) {
            JSONObject jsonResult = JSON.parseObject(result);
            String data = jsonResult.getString(HttpResultConstant.DATA);
            return JSON.parseArray(data, clazz);
        }
        return Lists.newArrayList();
    }

    /**
     * 获取返回结果(Page)
     *
     * @param result
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> PageVO<T> getDataPage(String result, Class<T> clazz) {
        String data = ResponseUtil.getDataString(result);
        JSONObject jsonData = JSON.parseObject(data);
        Long total = jsonData.getLong(HttpResultConstant.TOTAL);
        List<T> list = JSON.parseArray(jsonData.getString(HttpResultConstant.DATA_LIST), clazz);

        PageVO<T> pageVO = new PageVO<>();
        pageVO.setTotal(total);
        pageVO.setDataList(list);
        return pageVO;
    }
}
